perm filename NLF.SAI[SYS,HE]7 blob
sn#089099 filedate 1974-02-28 generic text, type T, neo UTF8
00100 BEGIN "NLF"
00200 REQUIRE "PREAMB.sai[SYS,HE]" SOURCE_FILE;
00300 SMP TO_ARM(REAL ARRAY T;REFERENCE INTEGER FLAG);
00400 SMP GO_ARM(REAL ARRAY T;REFERENCE INTEGER FLAG);
00500 REQUIRE 200 STRING_SPACE;
00600 DEFINE CRLF="'15&'12";
00700 PRELOAD_WITH 0, 0, 0.4, 1.0;
00800 SAFE REAL ARRAY SL[1:4];
00900 SAFE REAL ARRAY NULL[1:4];
01000 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 10.0,
01100 -1.00000, 0.00000, 0.00000, 25.0,
01200 0.00000, 0.00000, -1.00000, 1.0,
01300 0.00000, 0.00000, 0.00000, 1.0;
01400 REAL ARRAY X1[1:4,1:4];
01500 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 10.0,
01600 -1.00000, 0.00000, 0.00000, 25.0,
01700 0.00000, 0.00000, -1.00000, 0.8,
01800 0.00000, 0.00000, 0.00000, 1.0;
01900 REAL ARRAY FROM[1:4,1:4];
02000 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 20.0,
02100 -1.00000, 0.00000, 0.00000, 25.0,
02200 0.00000, 0.00000, -1.00000, 1.2,
02300 0.00000, 0.00000, 0.00000, 1.0;
02400 REAL ARRAY X2[1:4,1:4];
02500 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 30.0,
02600 -1.00000, 0.00000, 0.00000, 25.0,
02700 0.00000, 0.00000, -1.00000, 0.9,
02800 0.00000, 0.00000, 0.00000, 1.0;
02900 REAL ARRAY X3[1:4,1:4];
03000 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 30.0,
03100 -1.00000, 0.00000, 0.00000, 25.0,
03200 0.00000, 0.00000, -1.00000, 0.8,
03300 0.00000, 0.00000, 0.00000, 1.0;
03400 REAL ARRAY TOA[1:4,1:4];
03500 PRELOAD_WITH -1.00000, 0.00000, 0.00000, 30.0,
03600 0.00000, 1.00000, 0.00000, 25.0,
03700 0.00000, 0.00000, -1.00000, 0.8,
03800 0.00000, 0.00000, 0.00000, 1.0;
03900 REAL ARRAY SQAR[1:4,1:4];
04000 PRELOAD_WITH 0,0,0,1;
04100 REAL ARRAY ZERO[1:4];
04200 INTEGER I,M;
04300 BOOLEAN FIRST;
04400 STRING S;
04500 LABEL L1;
04600 SIMPLE PROCEDURE SORRY;
04700 BEGIN OUTSTR("SORRY"&CRLF&CRLF);
04800 CALL(0,"EXIT");
04900 END;
05000
05100
05200 SIMPLE PROCEDURE MOVE_IT(REAL ARRAY A,B);
05300 BEGIN INTEGER PLAN_SAV;
05400 A[3,4]←A[3,4]-1.00;
05500 ISSUE(5,"NLF","HANDY",MESSAGE START_TRAJECTORY ("HANOI",0));
05600 ISSUE(5,"NLF","HANDY",MESSAGE SET_ARM("FROM",A,FROM));
05700 ISSUE(5,"NLF","HANDY",MESSAGE SET_ARM("TO",B,TOA));
05800 ISSUE(5,"NLF","HANDY",MESSAGE CLOSE_TRAJECTORY);
05900 ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(0,"HANOI"));
06000 ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(CVSIX("SYS HE"),"NLF"));
06100 IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" SORRY, YOU WILL HAVE TO DO IT FOR ME"&CRLF);
06200 B[3,4]←B[3,4]+1.0;
06300 END;
06400
06500 RECURSIVE PROCEDURE STACK(INTEGER H;REAL ARRAY A,B,C);
06600 BEGIN IF H=1 THEN
06700 BEGIN MOVE_IT(A,B);
06800 RETURN ;
06900 END;
07000 H←H-1;
07100 STACK(H,A,C,B);
07200 MOVE_IT(A,B);
07300 STACK(H,C,B,A);
07400 END;
00100 PUT_DATA(0,0,"NLF");
00200 WHILE ¬ YES_HAND DO CALL(1,"SLEEP");
00300 OUTSTR("DRIVE INITIALIZED"&CRLF&CRLF);
00400 DO BEGIN
00500 ISSUE(5,"NLF","HANDY",MESSAGE START_TRAJECTORY ("HANOI",0));
00600 ISSUE(5,"NLF","HANDY",MESSAGE PARK_ARM);
00700 ISSUE(5,"NLF","HANDY",MESSAGE OPEN_HAND(3));
00800 ISSUE(5,"NLF","HANDY",MESSAGE CLOSE_TRAJECTORY);
00900 OUTSTR("STAND CLEAR OF THE ARM AND TYPE C/R
01000 ");
01100 INCHWL;
01200 ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(0,"HANOI"));
01300 IF ARM_STATUS THEN BEGIN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
01400 INCHWL;
01500 END;
01600 END UNTIL ¬ARM_STATUS;
01700 OUTSTR("PLACE BLOCKS AT (10,25) AND TYPE THE HEIGHT"
01800 &CRLF&CRLF);
01900 SETFORMAT(0,1);
02000 X1[3,4]←0.8;
02100 X2[3,4]←0.8;
02200 X3[3,4]←0.8;
02300 S←INCHWL;
02400 I←INTSCAN(S,M);
02500 IF I<1 THEN BEGIN OUTSTR("WE CANNOT MOVE BELOW THE TABLE"&CRLF&CRLF);
02600 SORRY;END;
02700 M←2↑I-1;
02800 OUTSTR("THAT'S "&CVS(M)& " MOVES, KEEP YOUR FINGERS CROSSED"&CRLF&CRLF);
02900 SETFORMAT(-5,0);
03000 X1[3,4]←X1[3,4]+I;
03100 ISSUE(5,"NLF","HANDY",MESSAGE START_TRAJECTORY ("HANOI",0));
03200 ISSUE(5,"NLF","HANDY",MESSAGE MOVE_ARM(X1,ARM_PLAN));
03300 ISSUE(5,"NLF","HANDY",MESSAGE CLOSE_TRAJECTORY);
03400 ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(0,"HANOI"));
03500 IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
03600 OUTSTR("THIS IS WHERE THE ARM THINKS THE BLOCKS SHOULD BE
03700 TYPE C/R TO PROCEED
03800 ");
03900 INCHWL;
04000 STACK(I,X1,X2,X3);
04100 M←ISSUE(5,"NLF","HANDY",MESSAGE START_TRAJECTORY("HANOI",0));
04200 ISSUE(5,"NLF","HANDY",MESSAGE PARK_ARM);
04300 ISSUE(7,"NLF","HANDY",MESSAGE CLOSE_TRAJECTORY);
04400 ISSUE(7,"NLF","HANDY",MESSAGE DO_IT(0,"HANOI"));
04500 IF ARM_STATUS THEN OUTSTR("DID I HIT SOMEBODY!"&'15&'12) ELSE
04600 OUTSTR("IF THAT HAD BEEN 64 BLOCKS THE WORLD WOULD HAVE JUST ENDED!
04700 THANK YOU AND GOOD NIGHT."&CRLF&CRLF);
04800 END;